package com.browsesoft.dbtools;

import java.util.Hashtable;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Map;

import com.browsesoft.Tools;

/**
 * 因角色中保存用户数据过长,造成数据无法插入,庆华已发现该问题. 故程序修改未用户保存角色,
 * 该程序对于旧的数据库,需要对t_role,t_user表结构修改,并进行数据转换,
 */
public class RoleAndUserDataModify {
	/**
	 * 数据处理
	 */
	public void dataDispose(Map map) {
		try {
			// 将role表中的数据插入用户表
			String querySql = "select id,users from t_role ";
			String datas[][] = DBTools.executeQueryWithTableHead(querySql);
			for (int i = 1; i < datas.length; i++) {
				Map attrs = DBTools.getAttributes(datas, i);
				String id = (String) attrs.get("id");
				String users = (String) attrs.get("users");
				// 给用户设置角色数据
				setRoleToUser(id, users);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 给用户设置角色
	 */
	private static void setRoleToUser(String roleId, String users) {
		LinkedList usersList = Tools.stringToLinkedList(users);
		Iterator usersIter = usersList.iterator();
		while (usersIter.hasNext()) {
			// 得到用户角色列值
			String userId = (String) usersIter.next();
			String roleValue = getRolesValue(userId);
			// 添加roleId数据
			if (roleValue == null || roleValue.equals("")) {
				roleValue = roleId;
			} else {
				roleValue += "," + roleId;
			}
			// 更新用户角色列数据
			updateUserRolesData(userId, roleValue);
		}
	}

	/**
	 * 根据用户id得到该用户角色列value
	 */
	private static String getRolesValue(String userId) {
		try {
			String sql = "select roles from t_user where id = '" + userId + "'";
			String datas[][] = DBTools.executeQueryWithTableHead(sql);
			// 没有找到，返回空
			if(datas.length < 2) {
				return null;
			}
			return datas[1][0];
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

	/**
	 * 更新用户角色数据
	 */
	private static void updateUserRolesData(String userId, String roleValue) {
		try {
			Hashtable map = new Hashtable();
			map.put("roles", roleValue);
			DBTools.update("t_user", userId, map);
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}
}
